package collections;

import java.util.*;

/**
 * 1、键集 : 所有的 映射项 的 键 组成的 Set 集合 ，通过 keySet() 方法获取
 * 2、值集 : 所有的 映射项 的 值 组成的 Collection 集合，通过 values() 方法来获取
 * 3、键-值映射关系集 : 就是 映射项 集合，所有的 映射项 组成的 Set 集合，通过 entrySet() 来获取
 * 4、本例中，对 三种 集合 都采用了迭代器来迭代
 */
public class MapTest3 {

    public static void main(String[] args) {
        Map<String , Integer> map = new HashMap<>();

        System.out.println("size : " + map.size() + " , is empty : " + map.isEmpty());

        map.put("藜蒿炒腊肉", 10);
        map.put("蒜苗回锅肉", 12);
        map.put("土豆片回锅肉", 12);
        map.put("毛血旺", 10);

        System.out.println(map); // { key = value , key = value , .... }

        // 获得 Map 中 所有 映射项 的 键 组成的 Set 集合
        Set<String> set = map.keySet();// Collection<String> keySet = map.keySet();
        System.out.println( set);
        // Set 是 Collection 的子接口，所以可以将 Set 实例当做 Collection 来处理
        Iterator<String> iSet = set.iterator();// 获取 Collection 的 迭代器
        // 使用迭代器迭代集合
        while ( iSet.hasNext() ){
            String key = iSet.next();
            System.out.println( key );
        }

        System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );

        Collection<Integer> collection = map.values();
        System.out.println( collection );

        Iterator<Integer> iValue = collection.iterator();
        while ( iValue.hasNext() ){
            Integer value = iValue.next();
            System.out.println( value );
        }

        System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );

        // 从 Map 中获取 所有的 映射项 ( Map.Entry ) 组成的 Set 集合
        // 每个 映射项 就是一个 Map.Entry 实例，其中包括了 键 ( key ) 和 值 ( value )
        Set< Map.Entry<String , Integer> > entrySet = map.entrySet();

        Iterator< Map.Entry<String , Integer > > it = entrySet.iterator();

        while ( it.hasNext() ){
            Map.Entry<String , Integer> entry = it.next();
            System.out.println( entry.getKey() + " : " + entry.getValue() );
        }

    }
}
